import axios from "axios";
import store from "@/store";
import router from "@/router";
// 线上环境: https://apipc-xiaotuxian-front.itheima.net/
// 开发环境: http://pcapi-xiaotuxian-front-devtest.itheima.net/
// 基准地址
export const baseURL = "http://pcapi-xiaotuxian-front-devtest.itheima.net/";
// 创建请求实例对象;(不包含token)
const instanceWithoutToken = axios.create({ baseURL });

// 创建请求实例对象;(包含token)
const instanceWithToken = axios.create({ baseURL });

// 配置请求拦截器
instanceWithToken.interceptors.request.use((config) => {
  // 判断token是否存在;
  const token = store.state.user.profile.token;
  if (token) {
    // 存在则设置请求头;
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

// 响应拦截器(减少数据层级, 检查token过期情况)
// 携带token 响应拦截
instanceWithToken.interceptors.response.use(
  // 请求成功状态码
  (response) => {
    // 返回精简数据
    return response.data;
  },
  // 请求失败
  (error) => {
    if (error.response.status === 401) {
      // 401代表未授权
      // 1. 跳转到登录页(router.push返回的Promise)
      router
        .push("/login")
        .then(() => {
          console.log("跳转成功");
        })
        .catch(() => {
          console.log("跳转失败");
        });
      // 2. 清楚用户数据
      store.commit("user/setUser", {});
    }
    // 返回
    return Promise.reject(error);
  }
);

// 响应拦截器，不携带token 返回 response.data、捕获错误传递错误
instanceWithoutToken.interceptors.response.use((response) => response.data);

// 生成请求配置
function generateRequestConfig(url, method, data) {
  return {
    url: url,
    method: method,
    [method === "get" ? "params" : "data"]: data,
  };
}
// 发送携带token的请求
export function requestWithToken(url, method, data) {
  return instanceWithToken(generateRequestConfig(url, method, data));
}
// 发送普通请求
export function requestWithoutToken(url, method, data) {
  return instanceWithoutToken(generateRequestConfig(url, method, data));
}
